package atack.tesis.kelluntekun.domain;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.vaadin.aceeditor.gwt.ace.AceMode;

import atack.tesis.kelluntekun.domain.enums.Pais;
import atack.tesis.kelluntekun.domain.enums.Sexo;

@Entity
public class Usuario implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO) 
	private Long id;
	@Column(nullable = false)
	private String mail;
	@Column(nullable = false)
	private String password;
	@Column(nullable = false)
	private String salt;
	@Column(nullable = false)
	private String nick;
	@Temporal(TemporalType.DATE)
	private Date fechaNacimiento;
	@Enumerated(EnumType.STRING)
	private AceMode lenguajePrincipal;
	@Enumerated(EnumType.STRING)
	private Pais paisOrigen;
	@Enumerated(EnumType.STRING)
	private Sexo sexo; 
	@OneToMany(mappedBy="usuario", cascade=CascadeType.ALL)
	private Set<Carpeta> carpetas;
	@OneToMany(mappedBy="usuario", cascade=CascadeType.ALL)
	private Set<Snippet> snippets;
	
	
	
	public Usuario() {
		//
	}
	
	
	
	/**
	 * @param mail
	 * @param password
	 * @param nick
	 * @param fechaNacimiento
	 * @param lenguajesDominio
	 * @param paisOrigen
	 * @param sexo
	 */
	public Usuario(String mail, String password, String nick, AceMode lenguajesDominio,
			Sexo sexo, Pais pais) {
		super();
		this.mail = mail;
		this.password = password;
		this.nick = nick;
		this.lenguajePrincipal = lenguajesDominio;
		this.sexo = sexo;
		this.paisOrigen= pais;
	}



	/**
	 * @return the id
	 */
	public Long getId() {
		return id;
	}
	/**
	 * @param id the id to set
	 */
	public void setId(Long id) {
		this.id = id;
	}
	/**
	 * @return the mail
	 */
	public String getMail() {
		return mail;
	}
	/**
	 * @param mail the mail to set
	 */
	public void setMail(String mail) {
		this.mail = mail;
	}
	/**
	 * @return the password
	 */
	public String getPassword() {
		return password;
	}
	/**
	 * @param password the password to set
	 */
	public void setPassword(String password) {
		this.password = password;
	}
	/**
	 * @return the nick
	 */
	public String getNick() {
		return nick;
	}
	/**
	 * @param nick the nick to set
	 */
	public void setNick(String nick) {
		this.nick = nick;
	}
	/**
	 * @return the fechaNacimiento
	 */
	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}
	/**
	 * @param fechaNacimiento the fechaNacimiento to set
	 */
	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}
	
	/**
	 * @return the carpetas
	 * 
	 */
	public Set<Carpeta> getCarpetas() {
		return carpetas;
	}

	/**
	 * @param carpetas the carpetas to set
	 */
	public void setCarpetas(Set<Carpeta> carpetas) {
		this.carpetas = carpetas;
	}

	/**
	 * @return the snippets
	 */
	public Set<Snippet> getSnippets() {
		return snippets;
	}

	/**
	 * @param snippets the snippets to set
	 */
	public void setSnippets(Set<Snippet> snippets) {
		this.snippets = snippets;
	}

	/**
	 * @return the salt
	 */
	public String getSalt() {
		return salt;
	}

	/**
	 * @param salt the salt to set
	 */
	public void setSalt(String salt) {
		this.salt = salt;
	}



	/**
	 * @return the lenguajePrincipal
	 */
	public AceMode getLenguajePrincipal() {
		return lenguajePrincipal;
	}



	/**
	 * @param lenguajePrincipal the lenguajePrincipal to set
	 */
	public void setLenguajePrincipal(AceMode lenguajePrincipal) {
		this.lenguajePrincipal = lenguajePrincipal;
	}



	/**
	 * @return the paisOrigen
	 */
	public Pais getPaisOrigen() {
		return paisOrigen;
	}



	/**
	 * @param paisOrigen the paisOrigen to set
	 */
	public void setPaisOrigen(Pais paisOrigen) {
		this.paisOrigen = paisOrigen;
	}



	/**
	 * @return the sexo
	 */
	public Sexo getSexo() {
		return sexo;
	}



	/**
	 * @param sexo the sexo to set
	 */
	public void setSexo(Sexo sexo) {
		this.sexo = sexo;
	}
	
	public String toString(){
		return this.getNick();
	}
}
